首先來聽個歌吧
查了一下有什麼 view 相關的歌,結果只查到有個韓團的歌叫做 view ,實在是 po 不下去...所以就放了一首自己喜歡的歌囉!
今天來到全新的章節,來看看他寫了什麼吧~
這整篇文章主要講的是 controller 跟 view 之間的互動關係
在 2.1 這邊提到了一個很常用的慣例
如果今天有一個 controller 叫做 CandidatesController,如果內容長這樣
class CandidatesController < ApplicationController
def index
end
end
在 routes 檔案中有設定好路徑的前提下
雖然我們的 index 方法裡面什麼都沒寫,但他會根據這個 controller 跟 index 這個方法的名字去找到 views 資料夾底下 candidates 資料夾中有 index.html 字樣的檔案,檔案名稱有可能是 index.html.erb 或者 index.html.slim 等等
views/controller_name/action_name.html.erb => 會自動找到這裡來喔
檔案名其中的 erb 跟 slim 是樣版引擎,這裡面除了 html 的語法之外,還可以用特殊的方式容納其他語言的語法進來,這個方式根據不同樣板引擎會有不同的方法
接下來文章中提到我們可以用 render 這個方法去渲染出很多種類的資訊,比較常用的是我們會需要去渲染出同一個 controller 裡面的 action
# 以下六種方式都可以渲染出 candidates controller 中的 edit 畫面
render :edit
render action: :edit
render "edit"
render action: "edit"
render "candidates/edit"
render template: "candidates/edit"
render 後面還可以接其他種資訊
# 要渲染出其他 controller 的畫面可以用 render template:
render template: "products/show"
# render template 後面的 template 可以選擇不寫
render "products/show"
# render inline: 只適用在 erb 樣版引擎,不建議使用
render inline: "<% products.each do |p| %><p><%= p.name %></p><% end %>"
# 完全不想要任何 html 標籤的話可以使用 plain
render plain: "OK"
# 如果要渲染的 html 內容不多可以考慮寫在 controller 中
render html: helpers.tag.strong('Not Found')
# 除上述之外, 也可以 render json / xml / body / file 這些格式
在 render 後面,我們還可以額外增加一些屬性如下:
# conten_type 指的是要用什麼格式去渲染,預設會用 text/html
:content_type
# layout 可以指定我們要讓他的外殼用哪一份文件去渲染,這部分會在之後再提到
:layout
# 用 location 設定 HTTP Location header
:location
# 用 status 直接指定 http 狀態
:status
# 用 formats 轉換格式,預設是 html
:formats
# rails 預設中已經有手機跟桌機格式,可以用 varaints 去做變換
:variants
今天就先寫到這邊啦!請大家期待更多好歌吧(咦?)
參考資料
Rails Guide
[Rails] Action View, Layout, Partial, Render
本文章同步分享於 http://anthonychao.site/